package com.szjz.rabbitmq.client.workqueue;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.MessageProperties;
import com.szjz.rabbitmq.client.util.RabbitMQUtils;
import lombok.SneakyThrows;
import org.junit.jupiter.api.Test;

/**
 * @author 史博
 * @desc mq提供者
 * @date 2020/8/22 3:19 下午 周六
 */
public class Provider {

    /**
     * 工作队列 一对多
     */
    @SneakyThrows
    @Test
    public void sendMsg() {
        // 获取链接中的通道
        Connection connection = RabbitMQUtils.getConnection();
        Channel channel = connection.createChannel();
        // 通道绑定对应的消息队列
        // 参数1：队列名称 如果队列不存在自动创建
        // 参数2：定义队列是否要持久化  true: 持久化（队列保存到磁盘）false: 不持久化 。如果持久化，MQ重启的时候队列不会丢失
        // 参数3：是否独占队列
        // 参数4：是否在消息被消费完成后，消费者已断开和MQ的链接后自动删除队列
        // 参数5：额外的参数
        channel.queueDeclare("work", true, false, false, null);
        // 发布消息
        // 参数1：交换机名称
        // 参数2：队列名称
        // 参数3：传递参数额外设置(MessageProperties.PERSISTENT_TEXT_PLAIN: MQ服务重启的时候将消息持久化，保证消息不丢失)
        // 参数4：消息的具体内容
        for (int i = 0; i < 100; i++) {
            channel.basicPublish("", "work", MessageProperties.PERSISTENT_TEXT_PLAIN, ("work queue " + i).getBytes());
        }
        RabbitMQUtils.close(connection, channel);
    }
}
